<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        class Person {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            // 实例方法
            say() {
                console.log('hello');
            }
        }

        const p = new Person("emily", 18);
        p.say();
        console.log(p.name);
        console.log(p.age);

        // 静态方法
        class Person2 {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            // 静态方法使用 static 关键字修饰，是属于类本身的，不是属于实例的
            // 静态方法只能通过类直接调用，不能通过实例来调用，不会继承到实例中
            static say() {
                console.log('hello');
            }
        }
        Person2.say();

        const p2 = new Person2("emily", 18);
        // p2.say(); // 报错，p2.say is not a function


        // this 指向
        // 实例方法中的 this 指向的是实例
        // 静态方法中的 this 指向的是类本身
        class Person3 {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            static say() {
                console.log("World"); // Person3
            }
            static useSay() {
                this.say();  // 静态方法中的 this 指代的还是类本身，不是实例
            }
        }
        Person3.say();  // World
        const p3 = new Person3("emily", 18);
        Person3.useSay(); // World

    </script>
</body>

</html>